package cn.lg.soar.system.api.service;

import cn.lg.soar.common.algorithm.RSAPrivateKeyCoder;
import cn.lg.soar.common.algorithm.RSAPublicKeyCoder;
import cn.lg.soar.common.util.ParameterUtil;
import cn.lg.soar.common.util.data.DataUtil;

import java.security.NoSuchAlgorithmException;

/**
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface IRsaKeyApi {

    /**
     * 获取公钥
     * @return
     * @throws NoSuchAlgorithmException
     */
    byte[] getPublicKey(String bizType);

    /**
     * 获取私钥
     * @return
     */
    byte[] getPrivateKey(String bizType);

    /**
     * 获取公钥base64格式
     * @param bizType
     * @return
     */
    default String getPublicKeyStr(String bizType) {
        return DataUtil.BASE64EN.encodeToString(getPublicKey(bizType));
    }

    /**
     * 获取公钥密码器
     * @param bizType
     * @return
     */
    default RSAPublicKeyCoder getPublicKeyCoder(String bizType) {
        byte[] publicKey = getPublicKey(bizType);
        ParameterUtil.notNull(publicKey, "无法获取公钥");
        ParameterUtil.isTrue(publicKey.length != 0, "无法获取公钥");
        return new RSAPublicKeyCoder(publicKey);
    }

    /**
     * 获取私钥密码器
     * @param bizType
     * @return
     */
    default RSAPrivateKeyCoder getPrivateKeyCoder(String bizType) {
        byte[] privateKey = getPrivateKey(bizType);
        ParameterUtil.notNull(privateKey, "无法获取私钥");
        ParameterUtil.isTrue(privateKey.length != 0, "无法获取私钥");
        return new RSAPrivateKeyCoder(privateKey);
    }


}
